"""
异常：
    1、影响程序运行的异常，也就是bug
    2、捕获异常的格式：
        try:
            xxx  //有可能出现异常的代码
        except:      // 捕获所有异常
        except Exception as e:     // 捕获所有异常（常用）
        except 异常名称 as e:      // 捕获指定异常
        except (异常名称1,异常名称2) as e:     //捕获多个指定异常
            xxxx    //捕获到异常后执行的代码
        else
            xxxxx     // 未捕获到异常时执行的代码
        finally:
            xxxx       // 无论是否有异常都有执行的代码，一般用来关闭占用的资源
    3、异常的传递性： 异常具有传递性
"""

# -----------异常
try:
    print(name)      # 可能出现错误的代码  变量未定义
except Exception as e:      # 捕获异常类型 此语句是捕获所有异常
    print(e,type(e))

try:
    print(name)      # 可能出现错误的代码
except NameError as e:      # 捕获指定异常类型 此语句是捕获NameError类型的异常
    print(e,type(e))

try:
    print(1/0)      # 可能出现错误的代码
except (NameError,ZeroDivisionError) as e:      # 捕获多个指定异常类型 此语句是捕获NameError类型的异常
    print(e,type(e))

try:
    print(9/1)      # 可能出现错误的代码
except Exception as e:      # 捕获多个指定异常类型 此语句是捕获NameError类型的异常
    print(f'捕获到异常啦，异常内容是：{e}','异常类型是：',type(e))
else:    # 没有捕获到异常时执行的语句
    print('没有捕获到任何异常噢',9/1)
finally:        # 无论是否捕获到异常，都执行的语句
    print("不够有没有异常我都出现")

# -------异常传递性
def fun1():
    result = 1/0
    return result

def fun2(result):
    print(result)

try:
    fun2(fun1())
except Exception as e:
    print(f'捕获到异常啦，异常内容是：{e}','异常类型是：',type(e))
else:
    print('没有捕获到任何异常噢')
